#ifndef VECTOR3_H
#define VECTOR3_H

#include "Export.h"

namespace glow 
{
  template<class T>
    class SHARED Vector3
    {
    public :
		
    Vector3(T X = 0, T Y = 0, T Z = 0) : x(X), y(Y), z(Z) {}
      ~Vector3() {}
		
      T x;
      T y;
      T z;	

      Vector3<T> operator+(const Vector3<T> &v){
	Vector3<T> v2;
	v2.x = x+v.x;
	v2.y = y+v.y;
	v2.z = z+v.z;
	return v2;
      }

      Vector3<T> operator-(const Vector3<T> &v){
	Vector3<T> v2;
	v2.x = x-v.x;
	v2.y = y-v.y;
	v2.z = z-v.z;
	return v2;
      }

      Vector3<T> operator*(const Vector3<T> &v){
	Vector3<T> v2;
	v2.x = x*v.x;
	v2.y = y*v.y;
	v2.z = z*v.z;
	return v2;
      }

      Vector3<T> operator/(const Vector3<T> &v){
	Vector3<T> v2;
	v2.x = x/v.x;
	v2.y = y/v.y;
	v2.z = z/v.z;
	return v2;
      }
    };
	  
  typedef Vector3<unsigned int> Vector3ui;
  /* unsigned bytes for colors, textures */
  typedef Vector3<unsigned char> Vector3ub; 
  typedef Vector3<int> Vector3i;
  typedef Vector3<float> Vector3f;
  typedef Vector3<double> Vector3d;
	
}

#endif
